﻿using System;

namespace RectangleApplication
{
    class Rectangle
    {
        internal double length;
        internal double width;

        double GetArea()
        {
            return length * width;
        }

        public void Display()
        {
            Console.WriteLine("长度：{0}", length);
            Console.WriteLine("宽度：{0}", width);
            Console.WriteLine("面积：{0}", GetArea());
        }
    }//end class Rectangle

    class ExecuteRectangle
    {
        static void Main(string[] args)
        {
            Rectangle r = new Rectangle();
            r.length = 4.5;
            r.width = 3.5;
            r.Display();
            Console.ReadLine();
        }
    }
}

/*
 
Protected 访问修饰符
Protected 访问修饰符允许子类访问它的基类的成员变量和成员函数。这样有助于实现继承。我们将在继承的章节详细讨论这个。更详细地讨论这个。

Internal 访问修饰符
Internal 访问说明符允许一个类将其成员变量和成员函数暴露给当前程序中的其他函数和对象。换句话说，带有 internal 访问修饰符的任何成员可以被定义在该成员所定义的应用程序内的任何类或方法访问。 


在上面的实例中，请注意成员函数 GetArea() 声明的时候不带有任何访问修饰符。如果没有指定访问修饰符，则使用类成员的默认访问修饰符，即为 private。

Protected Internal 访问修饰符
Protected Internal 访问修饰符允许在本类,派生类或者包含该类的程序集中访问。这也被用于实现继承。


 */

/*
 
比如说：一个人A为父类，他的儿子B，妻子C，私生子D（注：D不在他家里）

如果我们给A的事情增加修饰符：

 public事件，地球人都知道，全公开
 protected事件，A，B，D知道（A和他的所有儿子知道，妻子C不知道）
 private事件，只有A知道（隐私？心事？）
 internal事件，A，B，C知道（A家里人都知道，私生子D不知道）
 protected internal事件，A，B，C，D都知道,其它人不知道 

 
 */

/*
 
(1) Pubilc ：任何公有成员可以被外部的类访问。
 (2) Private ：只有同一个类中的函数可以访问它的私有成员。
 (3) Protected ：该类内部和继承类中可以访问。
 (4) internal : 同一个程序集的对象可以访问。
 (5) Protected internal ：3 和 4 的并集，符合任意一条都可以访问。
范围比较：

private < internal/protected < protected internal < public
 
 */

/*
 
C# 中 public 和 internal 修饰符的区别

一个是国际妓女，谁用都可以，就是 public，一个是不懂外语的，只能在国内做生意，就是 internal，只能在当前所在的工程里面引用。你建两个工程，建立一个引用关系，被引用的里面建两个类，就能区别了。用 VS 的话，你根本点不出来那个不懂外语的 

 */